package practice3;

import javafx.util.Pair;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
//在同一个平面内，如果添加的每一条直线互不相交，则每添加一条直线，就会增加一个平面；
//当添加一条直线时，这条直线与当前平面内已有直线每产生一个不同位置的交点时，这条直线对平面总数量的贡献会额外增多一个，
public class P8720 {

    //线集合
    private static Set<Pair<Integer,Integer>> lines = new HashSet<>();

    private static long ans = 1;

    //计算新增的直线与原有直线间共有多少个交点
    public static void commputed(int a,int b){
        Set<Pair<Double,Double>> points = new HashSet<>();      //新增的点集
        for(Pair<Integer,Integer> line : lines){
            if(line.getKey() == a && line.getValue() ==b){
                continue;        //同一条线就跳过
            }
            Integer a2 = line.getKey();
            Integer b2 = line.getValue();
            double x = (b2 - b) * 1.0 / (a - a2);
            double y = a*x+b;
            points.add(new Pair<>(x,y));
        }
        int num = points.size();        //加入这条直线新增点的数量
        ans += num;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=0;i<n;i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            int size = lines.size();
            lines.add(new Pair<>(a,b));
            if(lines.size() != size){
                //新增了不重合的线
                ans++;
                commputed(a,b);
            }
        }
        System.out.println(ans);
    }


//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        String[] threanSet = new String[n];
//        for(int i=0;i<n;i++){
//            int a = sc.nextInt();
//            int b = sc.nextInt();
//            String thread = a +","+b;
//            threanSet[i] = thread;
//        }
//        Set<String> points = new HashSet<>();
//        //根据线求交点并存入集合中
//        for(int i=0;i<n;i++){
//            String thread1 = threanSet[i];
//            for(int j=0;j<n;j++){
//                String thread2 = threanSet[j];
//                if(thread1.equals(thread2)){
//                    continue;
//                }
//                String[] str1 = thread1.split(",");
//                int a1=Integer.parseInt(str1[0]);
//                int b1=Integer.parseInt(str1[1]);
//                String[] str2 = thread2.split(",");
//                int a2=Integer.parseInt(str2[0]);
//                int b2=Integer.parseInt(str2[1]);
//                if(a1 == a2){
//                    continue;
//                }
//                double x = (b2 - b1) * 1.0 / (a1 - a2);
//                double y = a1* x + b1;
//                points.add(x+","+y);
//            }
//        }
//        //交点个数
//        int number = points.size();
//        int ans;
//        if(number == 0){
//            ans=n+1;
//        }else if(number>=1&&number<=2){
//            ans=2*n;
//        }else{
//            ans=2*n+(number-1)/2;
//        }
//        System.out.println(ans);
//    }
}
